/*
 * @lc app=leetcode.cn id=27 lang=golang
 * @lcpr version=30118
 *
 * [27] 移除元素
 */

// @lcpr-template-start

// @lcpr-template-end
// @lc code=start
func removeElement(nums []int, val int) int {
	i, j := 0, len(nums)-1
	for i < j {
		for ; i < j && nums[i] != val; i++ {
		}
		for ; i < j && nums[j] == val; j-- {
		}
		if i < j {
			nums[i], nums[j] = nums[j], nums[i]
		}
	}
	if i < len(nums) {
		if nums[i] == val {
			return i
		}
		return i + 1
	}
	return i
}

// @lc code=end

/*
// @lcpr case=start
// [3,2,2,3]\n3\n
// @lcpr case=end

// @lcpr case=start
// [0,1,2,2,3,0,4,2]\n2\n
// @lcpr case=end

*/

